- get_state.dart
GetBuilder 是继承自 StatefulWidget 的,其对应的 State 是 GetBuilderState,在 initState 方法最后会调用 _subscribeToController,并向 controller 中添加 listener,用于刷新 UI:
1 | /// Register to listen Controller's events. |
这里的 controller 是在 initState 中通过 GetInstance().find 取得或通过 GetBuilder 的 init 参数指定的,是 GetxController 的子类。
- get_controllers.dart
我们看下 GetxController:
1 | abstract class GetxController extends DisposableInterface |
GetxController 混入了 ListNotifierMixin,而 addListener 和 addListenerId 正是 ListNotifierMixin 中的方法。
- list_notifier.dart
再查看 ListNotifierMixin,内部持有 _updaters 和 _updatersGroupIds,上面 _subscribeToController 中添加的 listener 最终都保存在了 _updaters 或者 _updatersGroupIds 中。
- get_controllers.dart
调用 update 的时候,如果指定了 ids,就会遍历 id 去 _updatersGroupIds 中查找匹配的 listener 并 call,如果没有指定 ids,则会调用 refresh 方法,refresh 会调用 _notifyUpdate 方法,遍历 _updaters 中的 listener 并 call,最后都是触发 setState。
以上基于 get 4.6.5 版本。